package fr.esisar.p2014.cs420.nsmwnr;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.custom.StyledText;

public class CreerLivre {

	Shell shell = null;
	private Display display = null;
	private StyledText preface;
	private StyledText postface;
	private Button Statistiques, SeConnecter,creerLivre;
	private Label connexion ;
	private List list;
	
	private int [] idPhotos;
	private int idPhoto;
	
	/**
	 * Constructeur
	 * @param d
	 */
	public CreerLivre(){
		display = MainApp.display;
	}
	
	/**
	 * Active la fenêtre en l'affichant ou la chargeant si besoin est
	 */
	public void setActive(){
		if(shell == null || shell.isDisposed()){
			run();
		}else{
			rafraichir();
			shell.setActive();
		}
	}
	
	/**
	 * Charge les composants
	 */
	/**
	 * @wbp.parser.entryPoint
	 */
	public void run(){

		shell = new Shell(display, SWT.SHELL_TRIM & ~SWT.RESIZE);		// Cr�e une fen�tre non redimensionnable
		shell.setText("Créer un Livre");
		shell.setSize(649, 530);
		shell.setImage(MainApp.icone);
		
		Label label = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
		label.setBounds(0, 50, 643, 8);
		
		SeConnecter = new Button(shell, SWT.NONE);
		SeConnecter.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				actionBouttonConnexion();
			}
		});
		SeConnecter.setBounds(534, 14, 99, 25);
		SeConnecter.setText("Se Connecter");
		
		Button btnRetourLa = new Button(shell, SWT.NONE);
		btnRetourLa.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				shell.dispose();
				MainApp.consult.setActive();
			}
		});
		btnRetourLa.setBounds(10, 14, 169, 25);
		btnRetourLa.setText("Retour à la consultation");
		
		connexion = new Label(shell, SWT.NONE);
		connexion.setBounds(313, 19, 215, 20);
		
		Statistiques = new Button(shell, SWT.NONE);
		Statistiques.setBounds(185, 14, 99, 25);
		Statistiques.setText("Statistiques");
		
		Label lblQuelSeraLa = new Label(shell, SWT.NONE);
		lblQuelSeraLa.setBounds(10, 64, 247, 20);
		lblQuelSeraLa.setText("Quelle sera la préface de votre livre ?");
		
		Label lblQuelSeraLa_1 = new Label(shell, SWT.NONE);
		lblQuelSeraLa_1.setBounds(10, 197, 259, 20);
		lblQuelSeraLa_1.setText("Quelle sera la postface de votre livre ?");
		
		Label lblChoisissezUnePhoto = new Label(shell, SWT.NONE);
		lblChoisissezUnePhoto.setBounds(10, 330, 247, 20);
		lblChoisissezUnePhoto.setText("Choisissez une photo de couverture :");
		
		creerLivre = new Button(shell, SWT.NONE);
		creerLivre.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				if (MainApp.idClient!=0){
					try {
						CreationLivre();
						shell.dispose();
						MainApp.consult.setActive();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}else{
					creerLivre.setEnabled(false);
				}
			}
		});
		creerLivre.setBounds(473, 463, 160, 30);
		creerLivre.setText("Créer votre Livre");
		creerLivre.setEnabled(false);
		
		list = new List(shell, SWT.BORDER);
		list.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				if (list.getSelectionIndex() >= 0) {
					idPhoto = idPhotos[list.getSelectionIndex()];
					creerLivre.setEnabled(true);
				}
			}
		});
		list.setBounds(10, 356, 623, 101);
		
		preface = new StyledText(shell, SWT.BORDER);
		preface.setBounds(10, 90, 623, 101);
		
		postface = new StyledText(shell, SWT.BORDER);
		postface.setBounds(10, 223, 623, 101);
		
		rafraichir();
		shell.open();
	}
	
	/**
	 * Cette fonction défini l'action à exécuter lorsque
	 * l'on clique sur le boutton de connexion :
	 * - soit on se connecte
	 * - soit on se déconnecte
	 */
	public void actionBouttonConnexion(){
		if(MainApp.idClient == 0){
			MainApp.conn.setActive();
		}else{
			MainApp.conn.deconnecter();
		}
	}
	
	/**
	 * Met à jour l'affichage
	 */
	public void rafraichir(){
		preface.setText("");
		postface.setText("");

		if(MainApp.estAdmin)
			Statistiques.setVisible(true);
		else
			Statistiques.setVisible(false);
		if(MainApp.idClient != 0){
			SeConnecter.setText("Déconnexion");
			connexion.setText(MainApp.prenom + " " + MainApp.nom);
			ListPhoto();
		}else {
			shell.dispose();
			MainApp.consult.setActive();
		}
		
	}
	
	/**
	 * Permet de créer un livre
	 * @throws SQLException
	 */
	public void CreationLivre() throws SQLException{
		Statement stmt;

		stmt = JDBC.getInstance().getStatement();
		stmt.executeUpdate("SET TRANSACTION READ WRITE");
		
		stmt.executeUpdate("INSERT INTO Livre (idAlbum, idPhoto, preface, postface) VALUES ("+Consultation.idAlbum+","+ idPhoto+", '"+preface.getText().replace('\'', '_')+"', '"+postface.getText().replace('\'', '_')+"' )");			

		stmt.executeUpdate("COMMIT");
		stmt.close();
		MainApp.rafraichir();
	}
	
	/**
	 * Affche toutes les photos pour la couverture
	 */
	public void ListPhoto(){
		Statement stmt;
		list.removeAll();

		try {
			stmt = JDBC.getInstance().getStatement();
			stmt.executeUpdate("SET TRANSACTION READ ONLY");
			
			// On compte les photos de l'utilisateur
			String req = "SELECT COUNT(idPhoto) FROM Photo WHERE idPhoto IN (SELECT idPhoto FROM Contient WHERE idAlbum = " + Consultation.idAlbum + ")";
			ResultSet rset = stmt.executeQuery(req);
			if (rset.next()){
				idPhotos = new int[rset.getInt(1)];
			}
			rset.close();
			
			// On affiche le chemin des photos et on récupère l'id correspondant
			req = "SELECT chemin, idPhoto FROM Photo WHERE idPhoto IN (SELECT idPhoto FROM Contient WHERE idAlbum = " + Consultation.idAlbum + ") ORDER BY chemin";
			rset = stmt.executeQuery(req);
			int i = 0;
			while (rset.next()){
				idPhotos[i] = rset.getInt(2);
				list.add(rset.getString(1));
				i++;
			}
			stmt.executeUpdate("COMMIT");
			rset.close();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Défini si la fenêtre est ouverte ou non
	 * @return
	 */
	public boolean estLance(){
		return shell != null && !shell.isDisposed();
	}
}
